package dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import model.Grupo;
import model.Respondente;

public class RespondenteDAO {
	private Connection conexao;
	private Statement st;
	private ResultSet rs;
	Adaptador adaptador = new Adaptador();
	
	public void inserir(Respondente respondente, String funcaoDoGrupo) throws SQLException{
		conexao = adaptador.abrirConexao();
		String sql = "SELECT inserirrespondente('"+respondente.getNome()+"','"+respondente.getEndereco()+"'," +
				"'"+respondente.getMatricula()+"','"+respondente.getCpf()+"','"+respondente.getEmail()+"','"+funcaoDoGrupo+"','"+respondente.getSenha()+"')";
		try{
			st = conexao.createStatement();
			rs = st.executeQuery(sql);
		}
		catch(SQLException sqle){
			sqle.getMessage();
		}finally{
			conexao.close();
			st.close();
		}
	}
	
	public boolean deletar(int codigo)throws SQLException{
		conexao = adaptador.abrirConexao();
		String sql = "DELETE FROM Respondente WHERE codigo='"+codigo+"'";
		try{
			st = conexao.createStatement();
			st.executeUpdate(sql);
			return true;
		}catch(SQLException sqle){
			sqle.getMessage();
			return false;
		}finally{
			conexao.close();
			st.close();
		}
	}
	
	public void atualizar(Respondente respondente)throws SQLException{
		conexao = adaptador.abrirConexao();
		String sql = "UPDATE Respondente SET nome='"+respondente.getNome()+"',endereco='"+respondente.getEndereco()+"'" +
					",matricula='"+respondente.getMatricula()+"',cpf='"+respondente.getCpf()+"',email='"+respondente.getEmail()+"'" +
					" WHERE codigo="+respondente.getCodigo()+"";
		try{
			st = conexao.createStatement();
			st.executeUpdate(sql);
		}catch(SQLException sqle){
			sqle.getMessage();
		}finally{
			conexao.close();
			st.close();
		}
	}
	
	public ArrayList<Respondente> listar() throws SQLException{
		ArrayList<Respondente> respondentes = new ArrayList<Respondente>();
		conexao = adaptador.abrirConexao();
		String sql = "SELECT * FROM Respondente r, Grupo g WHERE r.cod_grupo = g.codigo";
		try{
			st = conexao.createStatement();
			rs = st.executeQuery(sql);
			while(rs.next()){
				int codigo = rs.getInt("codigo");
				String nome = rs.getString("nome");
				String matricula = rs.getString("matricula");
				String endereco = rs.getString("endereco");
				String cpf = rs.getString("cpf");
				String email = rs.getString("email");
				int cod_grupo = rs.getInt("cod_grupo");
				String funcaoDosRespondentes = rs.getString("funcao");
				String dataInicio = rs.getString("data_inicio");
				String dataTermino = rs.getString("data_termino");
				int frequenciaResposta = rs.getInt("frequencia_resposta");
				Grupo grupo = new Grupo(funcaoDosRespondentes, dataInicio, dataTermino, frequenciaResposta);
				grupo.setCodigo(cod_grupo);
				Respondente now = new Respondente(codigo, nome, matricula, endereco, cpf, email);
				now.setGrupo(grupo);
				respondentes.add(now);
			}
			
		}catch(SQLException sqle){
			sqle.getMessage();
		}finally{
			conexao.close();
			st.close();
			rs.close();
		}
		return respondentes;
	}
	
	public Respondente isUsuarioValido(String matricula, String senha) throws SQLException{
		Respondente respondente = null;
		conexao = adaptador.abrirConexao();
		String sql = "SELECT * FROM Respondente WHERE matricula='"+matricula+"' and senha='"+senha+"'";
		try{
			st = conexao.createStatement();
			rs = st.executeQuery(sql);
			if(rs.next()){
				int codigo = rs.getInt("codigo");
				String nome = rs.getString("nome");
				String endereco = rs.getString("endereco");
				String cpf = rs.getString("cpf");
				String email = rs.getString("email");
				
				respondente = new Respondente(codigo, nome, matricula, endereco, cpf, email);
			}
			
			
		}catch(SQLException sqle){
			sqle.getMessage();
		}finally{
			conexao.close();
			st.close();
			rs.close();
		}
		return respondente;
	}

	public Respondente getRespondentePeloCodigo(int codigo) throws SQLException {
		
		Respondente respondente = null;
		
		conexao = adaptador.abrirConexao();
		String sql = "SELECT * FROM Respondente WHERE codigo='"+codigo+"'";
		try{
			st = conexao.createStatement();
			rs = st.executeQuery(sql);
			rs.next();
			String nome = rs.getString("nome");
			String endereco = rs.getString("endereco");
			String matricula = rs.getString("matricula");
			String cpf = rs.getString("cpf");
			String email = rs.getString("email");
			respondente = new Respondente(codigo,nome, endereco, matricula, cpf, email);
		}catch(SQLException sqle){
			sqle.getMessage();
		}finally{
			conexao.close();
			st.close();
			rs.close();
		}
		
		return respondente;		
	}

	public Respondente getRespondentePelaMatricula(String matricula) throws SQLException {
		
		Respondente respondente = null;
		
		conexao = adaptador.abrirConexao();
		String sql = "SELECT * FROM Respondente WHERE matricula='"+matricula+"'";
		try{
			st = conexao.createStatement();
			rs = st.executeQuery(sql);
			rs.next();
			String nome = rs.getString("nome");
			String endereco = rs.getString("endereco");
			String mat = rs.getString("matricula");
			String cpf = rs.getString("cpf");
			String email = rs.getString("email");
			int codigo = rs.getInt("codigo");
			respondente = new Respondente(codigo,nome, endereco, mat, cpf, email);
		}catch(SQLException sqle){
			sqle.getMessage();
		}finally{
			conexao.close();
			st.close();
			rs.close();
		}
		
		return respondente;		
	}
}
